import { _decorator, sys } from 'cc';
import DyHttpClient from "./DyHttpClient";
    DyHttpClient.defaultOptions.baseURL = 'https://sale.zhangshang.cc/api';  // 所有请求都会以这个 URL 作为基础路径
    DyHttpClient.defaultOptions.timeout = 15000;  // 请求超时设置为 15 秒

export class TimeBasedRequest {
  private static KEY_LAST_REQUEST_TIME = 'lastRequestTime';

  /**
   * 检查是否需要请求数据
   * @param {number} startHour - 目标时间段的开始小时
   * @param {number} startMinute - 目标时间段的开始分钟
   * @param {number} endHour - 目标时间段的结束小时
   * @param {number} endMinute - 目标时间段的结束分钟
   * @returns {Promise<boolean>} - 返回一个 Promise，表示请求是否成功
   */
  public static async checkAndRequestData(startHour: number, startMinute: number, endHour: number, endMinute: number): Promise<boolean> {
      const now = new Date();
      const currentHour = now.getHours();
      const currentMinute = now.getMinutes();
      const currentDate = now.toDateString(); // 获取当前日期（如 "Mon Oct 09 2023"）
      // 检查当前时间是否在目标时间段内
      if (
          (currentHour > startHour || (currentHour === startHour && currentMinute >= startMinute)) &&
          (currentHour < endHour || (currentHour === endHour && currentMinute < endMinute))
      ) {
          console.log('当前时间在目标时间段内，请求数据...');
          return this.requestData();
      } else {
          // 检查上次请求数据的时间
          const lastRequestTime = sys.localStorage.getItem(this.KEY_LAST_REQUEST_TIME);
          if (lastRequestTime) {
              const lastRequestDate = new Date(lastRequestTime).toDateString();
              // 如果上次请求数据的时间不是今天，则立刻请求数据
              if (lastRequestDate !== currentDate) {
                  console.log('当前时间不在目标时间段内，但上次请求数据不是今天，立刻请求数据...');
                  return this.requestData();
              } else {
                  console.log('当前时间不在目标时间段内，且上次请求数据是今天，无需请求数据。');
                  return Promise.resolve(false); // 无需请求数据，返回 false
              }
          } else {
              // 如果从未请求过数据，则立刻请求数据
              console.log('从未请求过数据，立刻请求数据...');
              return this.requestData();
          }
      }
  }

  /**
   * 请求数据的逻辑
   * @returns {Promise<boolean>} - 返回一个 Promise，表示请求是否成功
   */
  private static async requestData(): Promise<boolean> {
      return new Promise((resolve, reject) => {
          // 模拟请求数据的逻辑
          console.log('正在请求数据...');

           DyHttpClient.get("/game/state", { appId: "tt9a44ecf9054eb83e02" })
          .then((response) => {
            if (response.code == 200 && response.data) {
                 // 记录当前请求数据的时间
                 const now = new Date();
                 sys.localStorage.setItem( this.KEY_LAST_REQUEST_TIME, now.toString() );
              let dataState = response.data.state;
              resolve(dataState); // 请求成功，返回 true
            }
            console.log("GET Response:", response);
          })
          .catch((error) => {
            console.log('数据请求失败！');
            reject(false); // 请求失败，返回 false
            console.error("GET Error:", error);
          });
      });
  }

}

